/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.myapp.model.DAO.states;

import com.myapp.model.DAO.HibernateUtil;
import com.myapp.model.comentarios.Comentarios;
import com.myapp.model.ejercicios.Ejercicios;
import com.myapp.model.estados.Estados;
import com.myapp.model.mensajes.Mensajes;
import com.myapp.model.notificaciones.Notificaciones;
import com.myapp.model.resueltos.Resueltos;
import com.myapp.model.usuarios.Usuarios;
import java.util.List;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;

/**
 *
 * @author jaime
 */
public class EstadosDao {

    /* Metodo que devuelve una lista de todos estados
     * @return List
     */
    public List todosLosEstados() {
        List listEstados = null;
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        try {
            session.beginTransaction();
            //Consulta de comprobacion de login y password correctos
            listEstados = (List) session.createCriteria(Estados.class).list();
            session.getTransaction().commit();

        } catch (HibernateException err) {
            session.getTransaction().rollback();
        }
        return listEstados;
    }
    
    /**
     * Metodo que devuelve una lista con los estados de usuario
     * @return List
     */
    public List usuariosEstados() { // MUESTRA LOS 5 ESTADOS DE USUARIO
        List listEstados = null;
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        try {
            session.beginTransaction();
            //Consulta de comprobacion de login y password correctos
            //listEstados = (List) session.createCriteria(Estados.class).list();
            listEstados = (List) session.createQuery("from Estados where idestado <= 5").list();
            session.getTransaction().commit();

        } catch (HibernateException err) {
            session.getTransaction().rollback();
        }
        return listEstados;
    }
    
    /**
     * Metodo para cambiar el estado de un objeto de la base de datos, devuelve el
     * objeto con el estado cambiado
     * @param Object o
     * @param Estados e
     * @return Object
     */
    public Object changeState(Object o, Estados e) {
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        try {
            //Comenzar la transacción 
            session.beginTransaction();
            if (o instanceof Ejercicios) {
                Ejercicios c = (Ejercicios) o;
                c.setEstados(e);
                session.update(c);
                o=c;
            } else if (o instanceof Resueltos) {
                Resueltos c = (Resueltos) o;
                c.setEstados(e);
                session.update(c);
                o=c;
            } else if (o instanceof Usuarios) {
                Usuarios c = (Usuarios) o;
                c.setEstados(e);
                session.update(c);
                o=c;
            } else if (o instanceof Comentarios) {
                Comentarios c = (Comentarios) o;
                c.setEstados(e);
                session.update(c);
                o=c;
            } else if (o instanceof Mensajes) {
                Mensajes c = (Mensajes) o;
                c.setEstados(e);
                session.update(c);
                o=c;
            } else if (o instanceof Notificaciones) {
                Notificaciones c = (Notificaciones) o;
                c.setEstados(e);
                session.update(c);
                o=c;
            }

            //Confirmar transacción 
            session.getTransaction().commit();
        } catch (Exception ex) {
            System.out.println(ex);
            session.getTransaction().rollback();
        } finally {
            if (session.isOpen() && session.getTransaction().isActive()) {
                session.getTransaction().commit();
            }
            return o;
        }
    }
    
    /**
     * Metodo que nos devuelve un estado segun su id
     * @param Estados e
     * @return Estados
     */
    public Estados buscarPorId(Estados e) {
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        try {
            session.beginTransaction();

            //Consulta de comprobacion de login y password correctos
            e = (Estados) session.createCriteria(Estados.class).
                    add(Restrictions.eq("idestado", e.getIdestado())).uniqueResult();
            session.getTransaction().commit();

        } catch (HibernateException err) {
            session.getTransaction().rollback();
        }
        return e;
    }
}
